
/**
 * 生成符合 "8位-4位-4位-4位-12位" 格式的随机十六进制字符串
 * 格式示例：01999972-8b90-7fb1-9d05-198eb90dacc9
 * @returns {string} 符合格式的随机字符串
 */
function generateFormattedHexString() {
  // 辅助函数：生成指定长度的随机十六进制字符串（小写）
  const getRandomHexSegment = (length) => {
    let segment = '';
    // 生成足够长的随机十六进制数据（Math.random() 可能不足，多生成几位再截取）
    const randomHex = Math.random().toString(16).slice(2) + Math.random().toString(16).slice(2);
    // 截取需要的长度，若长度不足则补 "0"（避免极端情况下随机数过短）
    segment = randomHex.slice(0, length).padEnd(length, '0');
    return segment;
  };

  // 按格式拼接各段：8位 + 4位 + 4位 + 4位 + 12位
  const segments = [
    getRandomHexSegment(8),
    getRandomHexSegment(4),
    getRandomHexSegment(4),
    getRandomHexSegment(4),
    getRandomHexSegment(12)
  ];

  return segments.join('-');
}

const conversation_id = generateFormattedHexString();


const enJson = {
  "dz": "Stack",
  "ymdz": "Page Address",
  "bclx": "Error type",
  "llqbs": "Browser ID",
  "mc": "Name",
  "bcwj": "Error reporting file",
  "bcsj": "Error reporting time",
  "xxxx": "Details",
  "bcrz": "Error reporting log",
  "bcxx": "Error message"
}

const headers = {
  authorization: "Bearer cr_2a95dea844fcc8c8116d0ae1490025560095c235ae410b9304198da5d467d52e",
  "openai-beta": "responses=experimental",
  conversation_id: conversation_id,
  session_id: conversation_id,
  accept: "text/event-stream",
  "content-type": "application/json",
  "user-agent": "codex_cli_rs/0.42.0 (Windows 10.0.22000; x86_64) unknown",
  originator: "codex_rs",
  host: "127.0.0.1:3000",
}
const body = {
  model: "gpt-5",
  instructions: ``,
  input: [
    {
      type: "message",
      role: "user",
      content: [
        {
          type: "input_text",
          text: `始终用中文回答我，请帮我翻译这个json：\n\n${JSON.stringify(enJson)}至中文(zh) 并用json输出`,
        },
      ],
    },
  ],
  tools: [],
  parallel_tool_calls: false,
  reasoning: {
    effort: "medium",
    summary: "auto",
  },
  store: false,
  stream: true,
  include: [
    "reasoning.encrypted_content",
  ],
  prompt_cache_key: conversation_id,
}
let buffer = ''; // 用于拼接不完整的数据包

function parseSSE(data, callback) {
  buffer += data;
  const lines = buffer.split('\n'); // 按行分割

  // 最后一行可能不完整，留到下次处理
  buffer = lines.pop() || '';

  let eventType = 'message'; // 默认事件类型
  let eventData = [];

  for (const line of lines) {
    const trimmedLine = line.trim();
    if (!trimmedLine) {
      // 空行表示当前事件结束，触发回调
      if (eventData.length > 0) {
        const payload = eventData.join('\n');
        handleEvent(eventType, payload,callback);
        // 重置当前事件的临时变量
        eventType = 'message';
        eventData = [];
      }
    } else if (trimmedLine.startsWith('event:')) {
      // 提取事件类型（如 event: progress → 类型为 progress）
      eventType = trimmedLine.slice(6).trim();
    } else if (trimmedLine.startsWith('data:')) {
      // 提取数据内容（如 data: hello → 内容为 hello）
      eventData.push(trimmedLine.slice(5).trim());
    }
    // 忽略其他字段（如 id:、retry: 等，按需处理）
  }
}


// 处理解析后的事件
function handleEvent(type, data, callback) {
  // console.log(`收到事件 [${type}]:`, data);
  // 根据事件类型处理数据（如 JSON 解析）
  try {
    const jsonData = JSON.parse(data);

    //结束
    if (jsonData.type === 'response.reasoning_summary_text.done'|| jsonData.type === 'response.output_text.done') {
    callback&& callback({
        type: 'deltaDone',
        content: '/n'
      })
    }
    if (jsonData.type === 'response.reasoning_summary_text.delta' || jsonData.type === 'response.output_text.delta') {
      if (jsonData.delta) {
        console.log(jsonData.delta)
        callback&&callback({
          type: 'deltaAdd',
          content: jsonData.delta
        })
      }
    }

    // console.log('解析后的 JSON 数据:', jsonData);
  } catch (e) {
    // 非 JSON 格式数据直接使用
    // console.log('原始数据:', data);
  }
}
export const fetchChat = async (callback) => {
  fetch("https://gpt.okksports.com/openai/responses", {
    method: "POST",
    headers,
    body: JSON.stringify(body)
  }).then(response => {
    const reader = response.body.getReader();
    const decoder = new TextDecoder();
    reader.read().then(function processResult(result) {
      if (result.done) return;
      const data = decoder.decode(result.value, { stream: true });
      parseSSE(data, callback); // 复用上面的解析函数
      return reader.read().then(processResult);
    });
  });
}

fetchChat()
